package nahuel.games.carracer;

import java.util.Random;

import nahuel.games.carracer.Juego.Personaje;

public class Policia extends Auto {

	private static final long DELAY_POLICIA = 1000;
	private int velRelativaY = 0;
	private Auto objetivo;
	private Random rand;
	private long timePolicia;

	public Policia(GameView vista, Auto objetivo, int anchoD, int altoD) {
		super(vista, Personaje.policia, anchoD, altoD);
		this.objetivo = objetivo;
		rand = new Random();
//		this.imagen = R.drawable.policia;
//		redimensionar(gameView.getWidth(),gameView.getHeight());
		this.velY = VEL_RAPIDA;
		posInicial();
	}

	@Override
	public void posInicial(){
		x = (gameView.getWidth() / 5) * 2;
		y = gameView.getHeight() * 2;
	}

	@Override
	public boolean chequeoLimites(){
		if (x < gameView.getWidth() * 8 / 45) {
			x = gameView.getWidth() * 8 / 45;
		}
		if (x > (gameView.getWidth() * 37 / 45) - width) {
			x = (gameView.getWidth() * 37 / 45) - width;
		}
		return true;
	}

	public void update() {
		x += gameView.escalarVelocidadX(velX);
		y -= gameView.escalarVelocidadY(velY + velRelativaY);
		chequeoLimites();
		if(timePolicia + DELAY_POLICIA < System.currentTimeMillis()){
			cambiarVelocidad(rand.nextInt(100));
			timePolicia = System.currentTimeMillis();
		}
	}

	private void cambiarVelocidad(int porc){
		if ((porc > 0) && (porc <= 10)){
			this.velY = VEL_RAPIDA;
		}
		if ((porc > 10) && (porc <= 40)){
			this.velY = VEL_EXTRA;
		}
		if (porc > 40){
			this.velY = VEL_MAXIMA;
		}
		//chequeo la direccion en sentido al auto perseguido
		if((y - objetivo.y < 0) && (velY > 0)){
			velY = -velY;
			if(x - objetivo.x < 0){
				velX = VEL_RAPIDA;
			}
			else{
				velX = -VEL_RAPIDA;
			}
		}
		if((y - objetivo.y > 0) && (velY < 0)){
				velY = -velY;
				velX = 0;
		}
	}
	
	public void setVelocidadRelativa(int x, int y) {
		this.velRelativaY = -y;
	}
	
	@Override
	public void choque(Auto otro) {
		this.velY = -this.velY * 3/2;
		this.velX = otro.velX * 3/2;
		otro.velY = otro.velY * 1/3;
		otro.velX = -otro.velX * 3/2;
		otro.vida.bajarVida();
		update();
	}
}
